AOSP 编译 刷机 环境配置 您所在的位置:网站首页 indexing jdk AOSP 编译 刷机 环境配置

AOSP 编译 刷机 环境配置

2023-05-04 08:57| 来源: 网络整理| 查看: 265

本文大量参考:

https://zhuanlan.zhihu.com/p/535380743

购入手机:pixel 4

刷机系统:Ubuntu 22.04

刷入系统:Android 11

开发环境:Intellij Idea, vim, silver-searcher, klogg.

环境搭建

首先装好 ubuntu 系统,不一定非得是22.04,但是也别太老,参考官方教程即可。

https://source.android.com/source/initializing?hl=zh-cn安装JDK

经查证,本人用的系统一直是 java1.8,也就是 openjdk-8-jdk

以下原文内容引用一下:以Ubuntu系统为例:sudo apt-get updatesudo apt-get install openjdk-11-jdk注:现在AOSP编译要求JDK版本>=9安装其他程序包sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5

注:官方文档中缺失了libncurses5,会导致编译中途找不到libncurses.so.5库

安装 Repo 并使用 Repo 更新 AOSP 源码https://source.android.com/source/downloading?hl=zh-cn

然后查询

https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds

这个网站,获取你要编译的 android 版本,并同时记住 build id(后文用到)

以我为例,android 版本: android-11.0.0_r46 build_id: RQ3A.211001.001

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r46 repo sync -j8 #j8代表使用8个线下载驱动

https://developers.google.com/android/drivers?hl=zh-cn

这个网站,根据 build id(RQ3A.211001.001) 找到你的驱动,进行下载,解压 .sh 到上一步 aosp 根目录,然后执行 .sh 文件。

会将对应驱动解压到 vendor 相关目录。

注意:我在 build pixel4 对应版本的 android11 时候遇到如下错误:

“vendor/qcom/coral/proprietary/com.qualcomm.qcrilmsgtunnel.xml', needed by 'out/target/product/flame/system_ext/etc/permissions/com.qualcomm.qcrilmsgtunnel.xml', missing and no known rule to make it”

我编译的是 flame 版本,但是它提及到了 coral 的驱动。所以搜索相同 build id 的coral (Pixel 4 XL)的 qualcomm 驱动安装上。

编译代码

进入 aosp 根目录,依次执行:

1

source build/envsetup.sh

这一步是向当前shell写入环境变量,比如这时不论你在哪个文件夹,敲croot都可以回到 aosp 根目录。

2

lunch

根据选项选择就可以(敲入指定数字后回车)。pixel 4 设备是 flame。设备代码参照这里:

https://source.android.com/docs/setup/build/running?hl=zh-cn#selecting-device-build

这时会打出很多内容,可以注意一下 OUT_DIR,通过 export 该变量可以指定编译位置

export OUT_DIR=/xxx/xxxx/xx/x

如果你指定了,可以再次输入 lunch 确认一下。

3

m -j8

这里的 -jn 是多线程的意思。如果内存小于16G,建议开1-2个线程。

我是 2 x 8G 的内存,在编译时会弹出窗口,显示我有 15.8G 内存,开8个线程,会在编译到90左右的时候闪退,如果开着很多其他窗口,抢占内存,内存不够的话,会报一个错误,都没法直接开始。此时的建议是重启,不打开任何窗口,然后开一个terminal,开1-2个线程编译。(2 x 32G的金百达套条双11就买!)

不要使用 root 账号编译

这里推荐一下金百达的内存,是64G大内存里相对性价比最高的,问了很多同学和装机群的一些大佬,他们都在用。(返佣只有几毛的产品,我也是良心推荐了)

刷机先将手机的BL锁解开(每个机型都不同,网上会有对应的教程),进入fastboot模式:这里推荐用 adb 的方式进入,先 adb devices 确认设备已链接,然后输入 adb reboot bootloader 来使设备进入fastboot模式。配置fastboot工具(现在Google好像推出了在线刷写工具https://flash.android.com/,可以尝试使用),可以在aosp目录下通过make fastboot命令编译出来,也可以直接从网上下载:https://developer.android.com/studio/releases/platform-tools (如果你按照前面描述的方式build,那么它已经 build 到 google_aosp11/out/soong/host/linux-x86/bin/fastboot 了)进入编译后产生的镜像的目录..../aosp/out/target/product/flame(这个是你机型的代号,每种机器都不一样)执行命令fastboot flashall -w

5. 重启即可看到,我们编译的Android系统已经运行到了手机上

fastboot reboot #重启命令

too many open files

在Linux系统下有打开文件数的限制,可以使用以下命令设置最大可打开文件数

# ulimit -a 可以查看当前限制 ulimit -n 2048

由于本人不使用 Mac OS,相关内容没有收录。配置IDE环境生成IDE相关项目文件

使用的是 intellij IDEA

在代码根目录,执行以下代码:

source build/envsetup.sh mmma development/tools/idegen development/tools/idegen/idegen.sh

值得注意的是,内存不够,这里也是会编译失败的,好想要大内存啊w(゚Д゚)w。

执行 idegen.sh 时,可能会遇到错误

find: ‘out/target/product/flame/root/d’: Permission denied find: ‘out/target/product/flame/debug_ramdisk/d’: Permission denied find: ‘out/target/product/flame/recovery/root/d’: Permission denied

在执行 idegen.sh 前加 sudo 就可以,但是这需要 java 和 javac 在系统里装 11 的。

建议忽略这里的问题就好。

在执行完上述代码后,会在 AOSP 根目录生成 IDE 相关文件 android.ipr 和 android.iml:

android.iws 包含工作区的个人设置,比如打开过的文件,版本控制工具的配置,本地修改历史,运行和debug的配置等。android.ipr 一般保存了工程相关的设置,比如modules和modules libraries的路径,编译器配置,入口点等。android.iml 用来描述modules。它包括modules路径、 依赖关系,顺序设置等。一个项目可以包含多个 *.iml 文件。

使用 Intellij IDEA 打开 android.ipr 文件.

配置IDE

刚打开的时候,可能会卡,打不开配置文件,重启IDE即可。

这些参数是我自己配置的,请根据你的电脑酌情配置。

Intellij Idea 在 indexing 期间可能会很卡,有些耐心。

1)修改 VM 内存大小Help > Edit Custom VM Options 修改内容:

-Xms1g -Xmx5g

2)修改文件大小

i) Help -> Edit custom properties 添加内容:

idea.max.intellisense.filesize=100000 # 文件大小限制 idea.case.sensitive.fs=true # 区分大小写选项(这个可以不要,看你自己)

ii) 参考

https://youtrack.jetbrains.com/articles/IDEA-A-2/Inotify-Watches-Limit-Linux修改SDK和JDK选项 -- 当需要开发APP调试底层代码时,继续参考:把Android源码导入Android Studio进行调试

File -> Project Structure -> SDKs File -> Project Structure -> SDKs

可以新建一个新的 java jdk,或者编辑原有的。

然后删除下面 classpath 标签页里的所有文件,这是为了确保代码跳转到导入的framework中,而不是sdk中。

File -> Project Structure -> SDKs -> + -> Add Android SDK

添加进你的 android sdk,可通过 Android Studio 安装。

然后将 Classpath 中的 Android SDK 中的 jar 文件删除,否则会跳转到该 jar 中

File -> Project Structure -> Modules -> android -> Dependencies

在下拉窗口中, 选择系统源代码相对应的SDK版本,比如8.0的代码是API26,9.0代码是API28



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有